/**
 * dependencias de classe
 */
package br.edu.unoesc.smschool.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

import org.apache.commons.lang.builder.CompareToBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * @author Luiz
 * data: 15-08-2011
 */
@Entity
public class Equipamento extends GenericModel implements Comparable<Equipamento> {
	
	
	/**
	 * atributo utilizado para classes que implementam serializable
	 * - esta classe extende de GenericModel que implementa Serializable
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * atributos de classe
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long codigo;
	@Column(nullable = false)
	private String descricao;
	
	/**
	 * gets e sets da classe equipamento
	 * - gets pegam o valor do atributo
	 * - sets setam novos valores para os atributos
	 * @return
	 */
	
	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	
	@Override
	public Long getCodigo() {
		return codigo;
	}
	
	@Override
	public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}

	/**
	 * implementacao de metodo abstratos
	 * - futuramente utilizados em classes conversoras
	 * ou em alguma comparacao
	 */
	@Override
	public boolean equals(Object obj) {
		Equipamento outro = (Equipamento) obj;
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		Equipamento that = (Equipamento) obj;
		return new EqualsBuilder().append(this.getDescricao(), outro.getDescricao())
				.isEquals();
	}

	@Override
	public int hashCode() {
		int obj1 = 0;
		int obj2 = 0;
		if (obj1 == obj2)
			return obj1;
		if (obj2 == obj1)
			return obj2;
		return new HashCodeBuilder().append(this.getDescricao()).hashCode();
	}

	@Override
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
				.append("Descricao", this.getDescricao()).toString();
	}

	public int compareTo(Equipamento o) {
		return new CompareToBuilder().append(this.getDescricao(), o.getDescricao())
				.toComparison();
	}

}
